<?php

require_once APPLICATION_PATH . '/forms/NuevaLocalidadForm.php';
require_once APPLICATION_PATH . '/forms/BuscarLocalidad.php';

class LocalidadController extends Zend_Controller_Action
{

    private $localidades;

    public function init()
    {
        $this->initView();
        $this->_flashMessenger = $this->_helper->FlashMessenger;
        $this->view->baseUrl = $this->_request->getBaseUrl();
        $this->view->messages = $this->_flashMessenger;
    }

    public function indexAction()
    {
        $this->consultarAction();
    }

    public function consultarAction()
    {
        $this->view->title = "Listado de Localidades";

        $urlCriterio = $this->_request->getParam('criterio', null);
        $urlABuscar = $this->_request->getParam('mostrar', null);

        // si hay que realizar una busqueda
        if ($urlCriterio !== null && $urlABuscar !== null){
            $criterio = urldecode($urlCriterio);
            $aBuscar = urldecode($urlABuscar);

            $localidadesModel = new Spalm_Model_Single_LocalidadEntity();
            $select = $localidadesModel->getMapper()->getDbTable()->select();

            switch ($criterio) {
                case 'nombre' :
                    $select->where('nombre = ?',$aBuscar);
                    break;
                case 'codigoPostal' :
                    $codigo = (int) $aBuscar;
                    $select->where('codigo_postal = ?',$codigo);
                    break;
                case 'provincia' :
                    $provinciaModel = new Spalm_Model_Single_ProvinciaEntity();
                    $consultaProvincia = $provinciaModel->getMapper()->getDbtable()->select();
                    $consultaProvincia->where('nombre = ?',$aBuscar);

                    $provincia = current($provinciaModel->fetchAll($consultaProvincia));

                    $select->where('provincia_id = ?',$provincia->getPK());
                    break;
            }
        }
        else { // si no, recuperar todo
            $select = null;
        }

        $localidad = new Spalm_Model_Single_LocalidadEntity();
        $this->view->localidades = $localidad->fetchAll($select);

        
    }

    public function nuevaAction()
    {
        $this->view->title = "Agregar nueva localidad";
        $this->view->headTitle($this->view->title, 'PREPEND');



        $form = new Form_NuevaLocalidad();

        $this->view->form = $form;

        if ($this->getRequest()->isPost()) {
            $formData = $this->getRequest()->getPost();
            if ($form->isValid($formData)) {
                $provincia = new Spalm_Model_Single_ProvinciaEntity();
                $localidad = new Spalm_Model_Single_LocalidadEntity();

                //arma el objeto de provincias
                $provincia = $provincia->find( (int) $form->getValue('provincia'));

                $localidad->setCodigoPostal($form->getValue('codigoPostal'));
                $localidad->setNombre($form->getValue('nombre'));
                $localidad->setProvincia($provincia);


                $localidad->save();

                $this->_flashMessenger->addMessage('La localidad ha sido guardada con &eacute;xito');
                $this->_redirect("/localidad/consultar");
            } else {
                $form->populate($formData);
            }
        }

    }

    public function editarAction()
    {
        $id = (int)$this->_request->getParam('id', 0);
        $this->view->title = "Editar Localidad";


        $localidad = new Spalm_Model_Single_LocalidadEntity();
        $localidad = $localidad->find($id);

        $form = new Form_NuevaLocalidad($localidad);
        $this->view->form = $form;
        //$form->setAction($this->view->baseUrl . '/localidad/editar/id/' . $id);

        if (null === $localidad) {
            $this->_flashMessenger->addMessage('La localidad no existe');
            $this->_redirect("/");
        }

        if ($this->_request->isPost())
        {
            $formData = $this->_request->getPost();
            if (!$form->isValid($formData)) {
                $form->populate($formData);
                return;
            }

            try {
                $provincia = new Spalm_Model_Single_ProvinciaEntity();
                $provincia = $provincia->find($form->getValue('provincia'));

                $localidad->setNombre($form->getValue('nombre'));
                $localidad->setProvincia($provincia);


                $localidad->save();

                $this->_flashMessenger->addMessage('La localidad ha sido guardado con &eacute;xito');
                $this->_redirect("/localidad/consultar");

            } catch (Exception $e) {
                $this->_flashMessenger->addMessage($e->getMessage());
            }
        }
    }

    public function eliminarAction()
    {
        $id = (int)$this->_request->getParam('id', 0);

        $localidadModel = new Spalm_Model_Single_LocalidadEntity();
        $localidad = $localidadModel->find($id);

        if (null !== $localidad) {
            try {

                $localidad->remove();

                $this->_flashMessenger->addMessage('La localidad ha sido eliminada con &eacute;xito');
            } catch (Exception $e) {
                $this->_flashMessenger->addMessage($e->getMessage());
            }
        } else{
            $this->_flashMessenger->addMessage('La localidad no existe');
        }

        $this->_redirect("/localidad/consultar");
    }

    public function mostrarAction()
    {
        // action body
    }

    public function buscarAction()
    {
        $this->view->title = "Buscar Localidades";

        $form = new Form_BuscarLocalidad();
        $this->view->form = $form;

        if ($this->_request->isPost())
        {
            $formData = $this->_request->getPost();
            if (!$form->isValid($formData)) {
                $form->populate($formData);
                return;
            }

            $criterio = $form->getValue('criterio');
            $aBuscar = $form->getValue('buscado');

            $this->_redirect("/localidad/consultar/criterio/" . urlencode($criterio) . "/mostrar/" . urlencode($aBuscar));
        }
    }


}













